package com.tiankun.eurekauserinfo.controller;

import com.tiankun.eurekauserinfo.exception.BusinessException;
import com.tiankun.eurekauserinfo.utils.JsonResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;

/**
 * Created with IntelliJ IDEA
 * User: bear
 * Date: 2020/11/12
 * Description
 * Version: V1.0
 */

@RestController
@RequestMapping("/img")
@CrossOrigin   //用于实现跨域的注解
public class UploadController {

    @PostMapping("/upload")
    public Map upload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request) throws IOException {

        //判断文件大小是否超过1M
        if (multipartFile.getSize()>1024*1024){
            throw new BusinessException("文件大小不能超过1M");
        }
        //获取文件名字
        String originalFilename = multipartFile.getOriginalFilename();
        System.out.println("originalFilename:"+originalFilename);

        // 从原始文件名中获取后缀,作为新添加的文件的文件名后缀(匹配)
        String subfix = originalFilename.substring(originalFilename.indexOf(".")+1);
        System.out.println("subfix:"+subfix); //输出文件后缀
        //判断文件大小是否符合要求（大小不能超过1M）
//        file.length()  字节数


        //后缀必须是 .png/ jpg/ jpeg/ gif
//        file.getName()  微信截图asd12312123.png
//        substring(lastIndexOf(".")+1)

        //通过UUID生成文件名,再组合加上原来后缀->组成新的文件名
        //使用UUID作为文件名,保证服务器中存放的文件名唯一
        String targetFile = UUID.randomUUID().toString().replace("-","")+"."+subfix;
        System.out.println("targetFile:"+targetFile); //输出目标文件名

        //在springboot项目中，如何吧上传你的文件保存在指定的位置

        // 通过request获取当前程序的根路径"/"
        //   String path = request.getServletContext().getRealPath("/");
//        String path = "E:/upload/";
        String path = "/java/upload/bear/img/";
        String fileName = path+targetFile;
        System.out.println("fileName:"+fileName);  //输出文件完整地址

        String url="http://106.14.39.205:8770/tiankun-api-userinfo/img/"+targetFile;
        // 构建文件对象
        File uploadFile = new File(fileName);
        //核心操作(含有异常操作, 利用异常设定状态码(和前端约定)
        // 此处应当和ExceptionController结合, 当try执行成功则设定状态码0
        // 出现异常则设定其他
        // 再将异常信息结合BusinessException抛出, 交给ExceptionController处理


        //检查文件是否存在,如果不存在就创建一个
        if (!uploadFile.getParentFile().exists()){
            uploadFile.getParentFile().mkdirs();
        }

//        multipartFile.transferTo(uploadFile);

        //目标路径：/img/fileName
        //真实路径：/usr/upload/img

        //操作：mkdir ticket
        //在目标路径和真实路径之间进行关联映射（ResourceHandlerRegistry）


        try {
            multipartFile.transferTo(uploadFile);
        } catch (IOException e) {
            //e.printStackTrace();
            throw e;
        }




        //返回给前端
        JsonResult jsonResult=new JsonResult();
        jsonResult.put("file",null);

        jsonResult.put("fileName",targetFile);
        jsonResult.setData(fileName);
        jsonResult.setCode("200");
        jsonResult.put("url",url);
        return jsonResult.getValues();
    }
}
